Estoy tratando de ver si puedo eliminar los ceros finales de esta columna de número de teléfono.
Ejemplo:
0 1 8.00735e+09 2 4.35789e+09 3 6.10644e+09El tipo de esta columna es un objeto e intenté redondearlo, pero recibo un error. Revisé un par de ellos, sé que están en este formato "8007354384.0", y quiero deshacerme de los ceros finales con el punto decimal.
A veces recibí en este formato ya veces no, serán números enteros. Me gustaría verificar si la columna del teléfono tiene un cero final y luego eliminarlo.
Tengo este código pero estoy atascado en cómo verificar los ceros finales para cada fila.
data.ix[data.phone.str.contains('.0'), 'phone'] Recibo un error => *** ValueError: cannot index with vector containing NA / NaN values . Creo que el problema se debe a que algunas filas tienen datos vacíos, que en algún momento recibo. El código anterior debería poder omitir una fila vacía.
¿Alguien tiene alguna sugerencia? Soy nuevo en pandas pero hasta ahora es una biblioteca útil. Su ayuda será apreciada.
Nota El ejemplo proporcionado arriba, la primera fila tiene datos vacíos, lo cual a veces obtengo. Solo para asegurarse de que esto no se represente como 0 para el número de teléfono.
También los datos vacíos se consideran una cadena, por lo que es una combinación de flotantes y cadenas, si las filas están vacías.
usar astype(np.int64)
s = pd.Series(['', 8.00735e+09, 4.35789e+09, 6.10644e+09]) mask = pd.to_numeric(s).notnull() s.loc[mask] = s.loc[mask].astype(np.int64) s 0 1 8007350000 2 4357890000 3 6106440000 dtype: objectEn Pandas/NumPy, los enteros no pueden tomar valores NaN, y las matrices/series (incluidas las columnas de marco de datos) son homogéneas en su tipo de datos, por lo que tener una columna de enteros donde algunas entradas son None / np.nan es absolutamente imposible .
EDITAR: data.phone.astype('object') debería hacer el truco; en este caso, Pandas trata su columna como una serie de objetos genéricos de Python, en lugar de un tipo de datos específico (por ejemplo, str / float / int ), a costa del rendimiento si tiene la intención de ejecutar cálculos pesados con estos datos (probablemente no en Tu caso).
Suponiendo que desea conservar esas entradas de NaN, su enfoque de conversión a cadenas es una posibilidad válida:
data.phone.astype(str).str.split('.', expand = True)[0]
debería darle lo que está buscando (hay métodos de cadena alternativos que puede usar, como .replace o .extract , pero .split parece el más sencillo en este caso).
Alternativamente, si solo está interesado en la visualización de flotadores (supongo que es poco probable), puede hacer pd.set_option('display.float_format','{:.0f}'.format) , que en realidad no afecta tu información.
Esta respuesta de cs95 elimina el ".0" final en una fila.
df = df.round(decimals=0).astype(object)